<%@ page import="entity.User" %>
<%@ page import="java.util.*" %><%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2025/9/9
  Time: 16:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!--
通过taglib指令导入标签库
uri:指定导入的标签库的uri地址
prefix:前缀,理论上可以随便写,在使用时通过 前缀:标签名的方式使用
在实际开发中,前缀一般使用当前引入的标签库的short-name
而标签库中的short-name一般使用的是当前文件名
-->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>JSTL标签库</title>
</head>
<body>
<%
    int age = 18;
    request.setAttribute("age", age);
    // if(age < 5){婴儿}
    // if(age < 18){少年}
%>
<h2>if标签</h2>
<!--
    相当于Java中的Switch case
    test:指定表达式,当表达式结果为true时执行标签体内容
    每一个if标签都是独立的,此处不存在if-else
-->
<c:if test="${age < 5}">婴儿</c:if>
<c:if test="${age < 18}">少年</c:if>
<c:if test="${age < 30}">青年</c:if>
<c:if test="${age < 60}">中年</c:if>
<c:if test="${age >= 60}">老年</c:if>

<h2>choose标签</h2>
<!--
    相当于Java中的if else
    choose标签类似于Java中的if-else if-else语法
    choose存在两个子标签
    1.when子标签:可以存在多个,当满足条件时执行当前标签的标签体内容,执行完成之后退出choose标签
    2.otherwise子标签:一般只有一个,当所有的when标签的条件均不满足时执行当前标签体内容
-->
<c:choose>
    <c:when test="${age < 5}">婴儿</c:when>
    <c:when test="${age < 18}">少年</c:when>
    <c:when test="${age < 30}">青年</c:when>
    <c:when test="${age < 60}">中年</c:when>
    <c:otherwise>老年</c:otherwise>
</c:choose>
<h2>foreach标签</h2>
<%
    User user = new User("admin", "111111");
    User user2 = new User("jack", "222222");
    User user3 = new User("tom", "333333");
    User user4 = new User("alice", "444444");
    User user5 = new User("lucy", "555555");
    User user6 = new User("alex", "666666");
    User user7 = new User("john", "777777");
    User user8 = new User("lily", "888888");
    List<User> users = new ArrayList<>(Arrays.asList(user, user2, user3, user4, user5, user6, user7, user8));
    request.setAttribute("users", users);
%>
<!--
    foreach标签主要用于遍历操作
    items:当前迭代的集合是谁,一般是从作用域中获取集合数据
    var:当前迭代的对象
    for(User var : items)
    varStatus:当前迭代的对象的状态,该对象中存在一个index属性,表示当前的索引号
    begin:从索引为begin的元素开始迭代
    end:迭代到索引为end的元素
    step:步长
-->
<table border="1">
    <tr>
        <th>索引号</th>
        <th>编号</th>
        <th>用户名</th>
    </tr>
    <c:forEach items="${users}" var="user" varStatus="i" begin="2" end="6" step="2">
        <tr>
            <td>${i.index}</td>
            <td>${user.username}</td>
            <td>${user.password}</td>
        </tr>
    </c:forEach>
</table>
<h2>Map集合的遍历</h2>
<%
    Map<String, User> map = new HashMap<>();
    map.put("u1", user);
    map.put("u2", user2);
    map.put("u3", user3);
    map.put("u4", user4);
    map.put("u5", user5);
    map.put("u6", user6);
    map.put("u7", user7);
    map.put("u8", user8);
    request.setAttribute("map", map);
%>
<!--
    在Map集合的遍历中,通过var.key的方式获取key,var.value的方式获取值
-->
<table border="1">
    <tr>
        <th>key</th>
        <th>编号</th>
        <th>用户名</th>
    </tr>
    <c:forEach items="${map}" var="entry">
        <tr>
            <td>${entry.key}</td>
            <td>${entry.value.username}</td>
            <td>${entry.value.password}</td>
        </tr>
    </c:forEach>
</table>
<h2>formatDate标签</h2>
<%
    request.setAttribute("now", new Date());
%>
默认格式:<fmt:formatDate value="${now}"/><br>
date:<fmt:formatDate value="${now}" type="date"/><br>
time:<fmt:formatDate value="${now}" type="time"/><br>
both:<fmt:formatDate value="${now}" type="both"/><br>
自定义格式:<fmt:formatDate value="${now}" pattern="yyyy年MM月dd日 HH:mm:ss:SSS E"/>
</body>
</html>
